package org.lemon.cla.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.lemon.cla.pojo.Feedback;
import org.lemon.cla.vo.FeedbackVo; // 导入 FeedbackVo
import org.lemon.cla.dto.request.FeedbackSearchRequest; // 导入查询请求 DTO
import org.lemon.cla.enums.FeedbackStatusEnum; // 导入反馈状态枚举

public interface IFeedbackService extends IService<Feedback> {
    // IService 提供了丰富的 CRUD 方法

    /**
     * 根据反馈ID获取反馈详情，包含用户信息。
     * @param feedbackId 反馈ID
     * @return 反馈视图对象
     */
    FeedbackVo getFeedbackVoById(Long feedbackId);

    /**
     * 分页获取所有反馈，包含用户信息。
     * @param page 分页对象 (FeedbackVo 泛型)
     * @return 分页反馈视图对象列表
     */
    IPage<FeedbackVo> getAllFeedbacksVo(Page<FeedbackVo> page);

    /**
     * 根据多个条件模糊查询反馈，包含用户信息。
     * @param page 分页对象 (FeedbackVo 泛型)
     * @param request 查询请求DTO，包含模糊查询的各种条件
     * @return 分页反馈视图对象列表
     */
    IPage<FeedbackVo> searchFeedbacksByConditions(Page<FeedbackVo> page, FeedbackSearchRequest request);

    /**
     * 更新反馈的处理状态和回复。
     * @param feedbackId 反馈ID
     * @param newStatus 新的状态枚举
     * @param reply 管理员回复
     * @return true 如果更新成功，false 否则
     * @throws BusinessException 如果反馈不存在、状态值无效
     */
    boolean updateFeedbackStatusAndReply(Long feedbackId, FeedbackStatusEnum newStatus, String reply);
}